<html>
<title>Java 7 Concurrency Cookbook</title>
<body>
	<h1>Chapter 1: Thread Management</h1>
	<br>    Introduction 5</br>
	<br>    Creating and running a thread 6</br>
	<br>	Getting and setting thread information 9</br>
	<br>	Interrupting a thread 13-->PrimeGeneratorTest.java</br>
	<br>	Controlling the interruption of a thread 15</br>
	<br>	Sleeping and resuming a thread 19-->FileClockTest.java</br>
	<br>	Waiting for the finalization of a thread 21-->JoinTest.java</br>
	<br>	Creating and running a daemon thread 24-->DaemonTest.java</br>
	<br>	Processing uncontrolled exceptions in a thread 27-->UncaughtExceptionHandlerTest.java</br>
	<br>	Using local thread variables 30-->UnSafeShareTest.java
		                                  -->SafeShareTest.java</br>
	<br>	Grouping threads into a group 34-->ThreadsGroupTest.java</br>
	<br>	Processing uncontrolled exceptions in a group of threads 37-->ThreadGroupUncheckExceptionTest.java</br>
	<br>	Creating threads through a factory 40-->ThreadFactotyTest.java</br>

    <h1>Chapter 2: Basic Thread Synchronization</h1>
    <br>    Introduction 45</br>
	<br>	Synchronizing a method 46-->SynchronizingMethodTest.java</br>
	<br>	Arranging independent attributes in synchronized classes 52
									-->SynchronizeIndependentVariableTest.java</br>
		 
	<br>	Using conditions in synchronized code 57
		                            -->UseConditionsInSynchronizedCodeTest.java</br>
	<br>	Synchronizing a block of code with a Lock 61-->LockTest.java</br>
	<br>	Synchronizing data access with read/write locks 65-->ReadWriteLockTest.java</br>
	<br>	Modifying Lock fairness 70-->ModifyLockfairnessTest.java</br>
	<br>	Using multiple conditions in a Lock 73-->MultipleConditionsLockTest.java</br>

	<h1>Chapter 3: Basic Thread Synchronization</h1>     
	<br>	Introduction 83</br>
	<br>	Controlling concurrent access to a resource 84 -->SemaphoreTest.java</br>
	<br>	Controlling concurrent access to multiple copies of a resource 89
	                              --->SemaphoreTest1.java</br>
	<br>	Waiting for multiple concurrent events 92 -->CountDownLatchTest.java</br>
	<br>	Synchronizing tasks in a common point 97 -->CyclicBarrierTest.java</br>
	<br>	Running concurrent phased tasks 105 -->PhaserTest.java</br>
	<br>	Controlling phase change in concurrent phased tasks 114 -->PhaserMyTest.java</br>
	<br>	Changing data between concurrent tasks 120 -->ExchangerTest.java</br>

    <h1>Chapter 4: Thread Executors</h1>
	<br>	Introduction 125 </br>
	<br>	Creating a thread executor 126 -->Creating_A_Thread_Executor.java</br>
	<br>	Creating a fixed-size thread executor 131-->FixedThreadPoolTest.java </br>
	<br>	Executing tasks in an executor that returns a result 134 -->CallableTest.java </br>
	<br>	Running multiple tasks and processing the first result 138 -->RunMulTaskAndProcess1stResult.java</br>
	<br>	Running multiple tasks and processing all the results 143 -->RunMulTaskAndProcessAllResults.java</br>
	<br>	Running a task in an executor after a delay 148 -->RunTaskAfterADelay.java</br>
	<br>	Running a task in an executor periodically 151 -->RunTaskPeriodically.java</br>
	<br>	Canceling a task in an executor 155 -->CancelingTask.java</br>
	<br>	Controlling a task finishing in an executor 158 -->ControllTaskFinishing.java</br>
	<br>	Separating the launching of tasks and the processing of their results
			in an executor 161 -->CompletionServiceTest.java</br>
	<br>	Controlling rejected tasks of an executor 167-->RejectedTaskControllerTest.java</br>
	
	<h1>Chapter 5: Fork/Join  Framework</h1>
	<br>	Introduction 171 </br>
	<br>	Creating a Fork/Join Pool 173 --></br>
	<br>	Joining the results of the tasks 180--> </br>
	<br>	Running tasks asynchronously 189--> </br>
    <br>	Throwing exceptions in the tasks 195--> </br>
    <br>	Canceling a task --> </br>
	
</body> 

</html>